
import vnode from './vnode.js'


//只写三个参数低配版的  第三个参数不确定
/**
 * 产生虚拟DOM树，返回的一个对象
 * 低配版本的h函数，这个函数必须接受三个参数，缺一不可
 * @param {*} sel
 * @param {*} data
 * @param {*} c
 * 调用只有三种形态 文字、数组、h函数
 * ① h('div', {}, '文字')
 * ② h('div', {}, [])
 * ③ h('div', {}, h())
 */


export default  function(sel,data,c){

    if(arguments.length!=3){
       throw new Error('我们是低配版必须是三个参数')
    }
    //检查参数类型
    if(typeof c=='string' || typeof c=='number'){
          //这种的是情况1
          return vnode(sel,data,undefined,c,undefined)
    }else if(Array.isArray(c)){
         //这种的是情况2
         let children=[]
         for(let i=0;i<c.length;i++){
            if(!(typeof c[i] === "object" && c[i].hasOwnProperty("sel"))){
                throw new Error("传入的数组有不是h函数的项");
            }
            children.push(c[i])
            //循环结束就表明收集完了 此时它是有children节点的  可以直接在里面放回
         }
         return vnode(sel,data,children,undefined,undefined)

    }else if( typeof c === "object" && c.hasOwnProperty("sel") ){
          //这种的是情况3
          let children=[c] 
          return vnode(sel,data,children,undefined,undefined)
    }else{
        throw new Error('我们是低配版必须是三个参数')
    }

}